/**
 * 
 * @param {*} array 
 */
var countSort = function (array) {
  let count = [];
  // 查找到最大的数
  let max = Math.max.apply(null, array);
  let min = Math.min.apply(null, array);
  // 这里为了减少额外占用的空间，找出数组中的最大和最小值
  // 其中最小值会被用来插值计算时被减掉后作为数组下标，最终计算后的值需要加回来
  count = new Array(max - min + 1)
  count.fill(0, 0, count.length);
  console.log(count)
  // 对每个元素做计数
  for (let i = 0; i < array.length; i++) {
    const element = array[i];
    count[element - min]++;
  }
  let result = [];
  for(let item in count) {
    let times = count[item];
    for(let i=0;i<times;i++) {
      result.push(item*1 + min);
    }
  }
  console.log(result)
}
countSort([101,109,108,102,110,107,103])